require 'yaml'

module ActiveRecord
	class DataMigration < Migration
    class << self
      def create_from_yaml(klass_name)
        klass_name = klass_name.to_s if klass_name.kind_of?(Symbol)
        object_hash = {}
        
        say_with_time "Generate #{klass_name.camelize} from YAML" do
          klass_name = klass_name.camelize.constantize
          yaml_file = Dir["db/data/[0-9]*_#{self.name.to_s.tableize}.yml"].first
          data_hash = yaml_file ? YAML::load_file(yaml_file) : {} 
          data_hash.each do |key, data|
            obj = klass_name.new
            data.each do |attr_name, attr_value|
              obj.send("#{attr_name}=", attr_value)
            end
            yield(key, obj) if block_given?
            obj.save! if obj.new_record?
            object_hash[key.to_sym] = obj
          end
        end
        
        object_hash
      end
      
      def generate_data(klass_name, range, &block)
        klass_name = klass_name.to_s if klass_name.kind_of?(Symbol)
        
        say_with_time "Generate mass of #{klass_name.camelize}" do
          klass_name = klass_name.camelize.constantize
    
          range.each do |index|
            obj = klass_name.new
            yield index, obj if block_given?
            obj.save! if obj.new_record?
          end
        end
      end
    end
	end
end